package cn.good.yan.service.t6;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

import java.util.concurrent.atomic.AtomicReference;

/**
 * 6. CAS
 * AtomicReference 原子引用 - 泛型<T>
 *
 * @author shengren.yan
 * @create 2024-03-30
 */
public class CASDemo2 {
    public static void main(String[] args) {
        // AtomicReference 原子引用 - 泛型<T>
        AtomicReference<User> atomicReference = new AtomicReference<>();
        User u1 = new User("王强", 20);
        User u2 = new User("李楠", 30);
        User u3 = new User("欧派", 40);
        // 初始值，改为u1
        atomicReference.set(u1);
        // 将u1 改为 u2 （成功）
        System.out.println(atomicReference.compareAndSet(u1, u2) + "\t" + atomicReference.get().toString());
        // 将u1 改为 u3 （失败），初始值已经是u1
        System.out.println(atomicReference.compareAndSet(u1, u3) + "\t" + atomicReference.get().toString());
    }
}

// 实体
@Getter
@ToString
@AllArgsConstructor
class User {
    String userName;
    int age;
}